package com.yzkj.framework.beans.exception;

import com.yzkj.framework.beans.result.ApiStatus;
import com.yzkj.framework.beans.result.BaseApiStatus;

/**
 * 业务异常
 */
public class YzkjException extends ApiException {

    private static final long serialVersionUID = 1L;

    protected YzkjException(int code, String message) {
        super(code, message);
    }

    protected YzkjException(String message, Throwable cause) {
        super(message, cause);
    }

    /**
     * 根据异常消息实例化 YzkjException
     *
     * @param message 异常消息内容
     * @return YzkjException
     */
    public static YzkjException of(String message) {
        return of(ApiStatus.INTERNAL_SERVER_ERROR.getCode(), message);
    }

    /**
     * 根据 Status 实例化 YzkjException
     *
     * @param baseApiStatus 异常状态 {@link BaseApiStatus}
     * @return YzkjException
     */
    public static YzkjException of(BaseApiStatus baseApiStatus) {
        return of(baseApiStatus.getCode(), baseApiStatus.getMessage());
    }

    /**
     * 根据异常状态码和异常消息内容实例化 YzkjException
     *
     * @param code    异常状态码
     * @param message 异常消息内容
     * @return YzkjException
     */
    public static YzkjException of(Integer code, String message) {
        return new YzkjException(code, message);
    }

    /**
     * 根据异常消息和 Throwable 实例化 YzkjException
     *
     * @param message 异常消息内容
     * @param cause   throwable
     * @return YzkjException
     */
    public static YzkjException of(String message, Throwable cause) {
        return new YzkjException(message, cause);
    }

}
